package com.java.map;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.junit.Test;

/**
 * HashTable测试类
 * 		HashMap与HashTable的区别：
 *		1、HashMap（常用）
 *			线程不安全，效率高；允许null键和null值；遍历无序输出
 *		2、HashTable
 *			线程安全，效率低；不允许null键和null值；遍历无序输出
 * @author LC
 *
 */
public class HashTableTest {
	
	/**
	 * HashTable测试：键-值不能为null
	 */
	@Test
	public void testHashTable() {
		Map<String, String> map = new Hashtable<>() ;
		
		map.put("001", "北京市") ;
		map.put("002", "上海市") ;
		map.put("003", "天津市") ;
		map.put("003", "天津市") ;
		
		System.out.println("遍历输出map集合中所有的元素");
		Set<Entry<String, String>> objects = map.entrySet() ;
		Iterator<Entry<String, String>> iterator = objects.iterator() ;
		while(iterator.hasNext()) {
			Entry<String, String> entry = iterator.next() ;
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}
		System.out.println();
		
		try {
			System.out.println("添加key值为'004'的value为null");
			map.put("004", null) ;
			System.out.println("遍历输出map集合中所有的元素");
			for (Entry<String, String> entry : map.entrySet()) {
				System.out.println(entry.getKey() +":" + entry.getValue());
			}
		} catch (Exception e) {
			e.printStackTrace() ;
		} finally {
			System.out.println("key值为'004'的value不能为空");
		}
		
		System.out.println();
		
		try {
			System.out.println("添加key值为null的元素");
			map.put(null, "台湾省") ;
			System.out.println("遍历输出map集合中所有的元素");
			for (Entry<String, String> entry : map.entrySet()) {
				System.out.println(entry.getKey() +":" + entry.getValue());
			}
		} catch (Exception e) {
			e.printStackTrace() ;
		} finally {
			System.out.println("map中包含key值为null的元素");
		}
		
		
	}

}
